package com.xunshibao.tutor.user.service;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.xunshibao.tutor.po.Tutor;
import com.xunshibao.tutor.user.dao.TutorDaoImpl;

@Service
public class TutorServiceImpl {
	@Autowired
	private TutorDaoImpl tutorDao;
	/**
	 *  省：市：区,匹配(1:1, 1:1:1)
	 */
	private Pattern areaPattern  = Pattern.compile("^(\\d+)(:\\d+){1,2}$");

	/**
	 *  19|20 xx
	 */
	private Pattern yearPattern  = Pattern.compile("^[19|20]\\d{2}");
	// 验证中文
	private Pattern cnPattern  = Pattern.compile("[\u4e00-\u9fa5]");
	
	public void test() {
	    Pattern ptn = Pattern.compile("^\\[([1-7][123])(,[1-7][123])*\\]$");
	    boolean r = ptn.matcher("[13,14]").matches();
	    System.out.println(r);
	}
	
	public Tutor getTutor(Long userId) {
		return tutorDao.getById(userId);
	}
	/**
	 * TODO years和edu没有加上去
	 * @param tutor
	 * @param userId
	 * @return
	 */
	public int save(Tutor tutor, Long userId) {
		List<Integer> result = validateTutor(tutor);
		if(result.isEmpty()) { // 验证通过
			Tutor dbTutor = tutorDao.getById(userId);
			if(dbTutor != null) {// 数据库已经存在，做更新操作
				List<String> column = new LinkedList<String>();
				List<Object> values = new LinkedList<Object>();
				genUpdateSql(tutor, dbTutor, column, values);
				
				if(!column.isEmpty()) {
					values.add(userId);
					return tutorDao.update(column.toArray(new String[column.size()]), values.toArray(new Object[values.size()]), "id=?");
				} else {
					return 1;//没有做任何更新
				}
			} else { // 数据库中不存在，做插入操作
				tutor.setId(userId);
				tutor.setIscert(0);
				return tutorDao.save(tutor);
			}
		} else {
			//验证没有通过
			return -2;
		}
	}
	
	private void genUpdateSql(Tutor pageTutor, Tutor dbTutor,List<String> column, List<Object> values ) {
		
		if(dbTutor.getBarea() != null && !dbTutor.getArea().equals(pageTutor.getArea())) {
			column.add("area");
			values.add(pageTutor.getArea());
		}
		if(dbTutor.getBarea() != null && !dbTutor.getBarea().equals(pageTutor.getBarea())) {
			column.add("barea");
			values.add(pageTutor.getBarea());
		}
		if(dbTutor.getByear() != null && !dbTutor.getByear().equals(pageTutor.getByear())) {
			column.add("byear");
			values.add(pageTutor.getByear());		
		}
		if(dbTutor.getEdu() != null && !dbTutor.getEdu().equals(pageTutor.getEdu())) {
			column.add("edu");
			values.add(pageTutor.getEdu());
		}
		if(dbTutor.getSchool() != null && !dbTutor.getSchool().equals(pageTutor.getSchool())) {
			column.add("school");
			values.add(pageTutor.getSchool());
		}
		if(dbTutor.getTp() != null && !dbTutor.getTp().equals(pageTutor.getTp())) {
			column.add("tp");
			values.add(pageTutor.getTp());
		}
		if(dbTutor.getUname() != null && !dbTutor.getUname().equals(pageTutor.getUname())) {
			column.add("uname");
			values.add(pageTutor.getUname());
		}
	}
	
	/**
	 * TODO 后期可以考虑使用common-validator来代替
	 * @param tutor
	 * @return
	 */
	public List<Integer> validateTutor(Tutor tutor) {
		List<Integer> result = new ArrayList<Integer>();
		String value = tutor.getArea();
		Matcher m;
		// 验证所在地区
		if(StringUtils.isNotBlank(value)) {
			m = areaPattern.matcher(value);
			if(!m.find()) {
				result.add(-1);// 所在地区格式不正确
			}
			
		} else {
			result.add(-2);// 所在地区为空
		}
		// 验证 籍贯
		value = tutor.getBarea();
		if(StringUtils.isNotBlank(value)) {
			m = areaPattern.matcher(value);
			if(!m.find()) {
				result.add(-3);//籍贯格式不正确
			}
		} else {
			result.add(-4);// 籍贯 为空
		}
		// 验证 出生年份
		value = tutor.getByear();
		if(StringUtils.isNotBlank(value)) {
			m = yearPattern.matcher(value);
			if(!m.find()) {
				result.add(-5);// 出生年份 格式不正确
			}
		} else {
			result.add(-6);// 出生年份 为空
		}
		
		// 验证姓名
		value = tutor.getUname();
		if(StringUtils.isNotBlank(value)) {
			m = cnPattern.matcher(value);
			if(!m.find()) {
				result.add(-7);// 姓名格式不正确，必须为中文
			}
		} else {
			result.add(-8);// 姓名为空
		}
		return result;
	}

}
